//
//  HomeTableViewController.swift
//  个人微博
//
//  Created by 一介布衣 on 16/2/13.
//  Copyright © 2016年 HUAMANLOU. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD


class HomeTableViewController: BaseTableViewController {

    // 创建模型数组属性
    private lazy var statusesListViewModel = StatusListViewModel()
    // cellID
    private let homeCellId = "homeCellId"
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        if !userLogin {
            visitorLoginView?.setupUIWithInfo(nil, tipText: "关注一些人，回这里看看有什么惊喜")
            return
        }
        
        // 注册cell
        registerHomeCell()
        
        // 加载数据
        loadDate()
        
        // 设置提醒的小icon
        // 定时刷新接口数据，根据后端接口数据修改值，只能显示字符串
        tabBarItem.badgeValue = "99+"
    }
    
    
    /// 注册cell
    private func registerHomeCell() {
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: homeCellId)
        
        // 设置cell的高度
        // 要使tableView能够自动计算行高需要设置两个属性
        // 还要给tableView的cell的contentView设置约束
        // estimatedRowHeight估算高度可以随便估计一个值
        tableView.estimatedRowHeight = 300
        tableView.rowHeight = UITableViewAutomaticDimension
        
        // 设置分割线样式
        tableView.separatorStyle = .None
        
        // 系统下拉刷新控件
        refreshControl = UIRefreshControl()
        // 添加触发事件
        refreshControl?.addTarget(self, action: "loadDate", forControlEvents: .ValueChanged)
        
        // 将小菊花设置为tableFooterView
        tableView.tableFooterView = indicatorView
        // 小菊花开始转动，才会显示
//        indicatorView.startAnimating()
        
        // 设置点击状态栏快速回到顶部
        tableView.scrollsToTop = true
    }
    
    
    // MARK: - 加载首页数据
    @objc private func loadDate() {
        // 使用视图模型来获取网络请求的结果
        refreshControl?.beginRefreshing()
        statusesListViewModel.loadHomeData(self.indicatorView) { (isSuccess) -> () in
            self.refreshControl?.endRefreshing()
            if isSuccess {
                // 请求数据成功
                self.tableView.reloadData()
            }else {
                // 请求数据失败
                SVProgressHUD.showErrorWithStatus("网络君正在睡觉，请稍候再试...")
            }
            
        }
    }
    
    // 懒加载上拉时底部小菊花视图
    private lazy var indicatorView: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
}



// MARK: - tableView的数据源方法
extension HomeTableViewController {
    
    // 返回每组的行数
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusesListViewModel.statuses.count
    }
    
    // 返回cell
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
        // 使用这个方法获取cell，手写代码的时候需要手动注册cell
        let cell = tableView.dequeueReusableCellWithIdentifier(homeCellId, forIndexPath: indexPath) as! StatusCell
    
        
//        cell.textLabel?.text = statuses[indexPath.row].user?.name
        
        // 如果正在加载最后一条cell，且小菊花没有转动的情况下，才去获取更多数据
        if indexPath.row == self.statusesListViewModel.statuses.count-1 && !indicatorView.isAnimating(){
                // 正在加载最后一条cell
                // 转动小菊花，等网络数据获取完毕之后再停止转动即可
                indicatorView.startAnimating()
                // 加载数据
                loadDate()

      
        }
    
        cell.status = statusesListViewModel.statuses[indexPath.row]
        
        return cell
    }
    
}











